/**
 * json
 *  1. json就是一种特殊的字符串
 *  2. json分类
 *      对象`{"name": "孙悟空", "age": 500}`
 *      数组`[1, 2, 3, "hello", true]`
 *  3. json允许的值：字符串 数值 布尔值 null 对象 数组
 *  4. JSON对象在IE7及以下版本的浏览器不支持, 可以使用eval()函数
 */

var {log} = console;

var JsonObj = {
    "name": "孙悟空",
    "age": 500,
    "sex": "男"
};

var JsonStrObj = `{
    "name": "孙悟空",
    "age": 500,
    "sex": "男"
}`;

// 0. 获取数据
log(JsonObj.name); // 孙悟空
log(JsonObj.age); // 500
log(JsonObj.sex); // 男

// 1. json.stringify: json对象转json字符串
var jsonToString = JSON.stringify(JsonObj);
log(typeof jsonToString) // string
log(jsonToString) // {"name":"孙悟空","age":500,"sex":"男"}

// 2. json.parse(): json字符串转json对象
var stringToJson = JSON.parse(JsonStrObj);
log(typeof stringToJson) // object
log(stringToJson) // { name: '孙悟空', age: 500, sex: '男' }
log(stringToJson.name) // 孙悟空
log(stringToJson.age) // 500
log(stringToJson.sex) // 男

// eval(): 执行一段字符串形式的js代码
// 在开发中尽量减少使用，因为性能较差且存在安全隐患
var strExcuteScript = 'log("DoSomething")'
eval(strExcuteScript) // DoSomething
// 如果不想将某个字符串当成代码块执行, 则需要在字符串前后加上()
var noStrExcuteScript = 'log("NotDoSomething")'
eval("(" + noStrExcuteScript + ")") // NotDoSomething
